Backdrop

프로그래머스 ▸ 스택/큐

주식가격
2

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

pricesreturn
[1, 2, 3, 2, 3][4, 3, 1, 1, 0]

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

풀이

이 문제는 해석하기가 조금 어려웠어요. 그래서 규칙을 정리해봤어요.

  1. 초를 셀 때 현재 원소를 포함해서 세는데, 다음 원소가 현재 원소보다 작아지기 전까지 계속 세요.
  2. 계속 세다가 다음 원소가 없는 경우, 그때까지 센 초에서 1을 빼요.

이 규칙을 예제로 살펴보면 다음과 같아요.

[1, 2, 3, 2, 3]; // prices
[5, 4, 1, 2, 1]; // 1번
[4, 3, 1, 1, 0]; // 2번

코드

function solution(prices) {
  return prices.map((p, i) => {
    let count = 1;
    while (p <= prices[i + count]) {
      count++;
    }
 
    if (!prices[i + count]) {
      count--;
    }
 
    return count;
  });
}